#!/bin/bash
#------------------脚本注释------------------------
# 用来获取nginx日志信息,供我们分析的脚本
# 注意: 这个脚本所检查的日志路径
# 注意: 这个脚本检查日志只能对应我们现有的日志格式
#       检查系统默认位置的时候显示的信息是错误的。
#--------------------------------------------------

###----------------路径变量------------------------
Log_file_dir='/usr/local/nginx/logs/'
Passwd_file_md5='da6855eb05fd6474342744ccc9efa4c8' ## 修改了文件就要重新填写这个md5信息
###----------------帮助信息------------------------
WEB_LOG_SCRIPT_HELP () {
  echo ""
  echo -e "\t\t\033[31;1m帮助信息\033[0m"
  echo -e "  使用方法:"
  echo -e "      $0 -f <文件名> [选项] [参数] "
  echo -e "      $0 -n"
  echo ""
  echo -e "  选项:"
  echo -e "    -n  查看现有网络连接数."
  echo -e "    -u  查看passwd文件的md5是否改变."
  echo -e "    -f  指定文件。这里需要指定完整的名字."
  echo -e "        {www|admin|api|weixin}.access.log"
  echo -e "        不限于上面的文件,只要输入的文件名"
  echo -e "        存在就可以;如果不加其他参数的话就"
  echo -e "        是cat文件."
  echo -e "    -s  指定ip地址，查看该地址访问次数。"
  echo -e "    -i  统计次数。{ code | ip }."
  echo -e "      code  如果输入的是code,会显示并统计日"
  echo -e "            里出现的状态码次数等信息."
  echo -e "      ip    如果输入的是ip,会显示并统计日志"
  echo -e "            里面出现的ip次数及信息."
  echo ""
  echo "-------------------end---------------------"
}

Parameter_error_help () {
  echo -e "\033[31;1m 您输入的参数有误,请检查! \033[0m"
  echo -e "\033[31;1m 可以输入-h查看帮助信息。\033[0m"
}

###----------------选项参数信息--------------------
  if [ "$#" = 0 ];then Parameter_error_help;exit;fi
  if [ -z "$1" ];then
      Parameter_error_help
    else
    while [ "$#" -gt 0 ];do 
      case "$1" in
        -n)shift;Script_n='OK';;
        -u)shift;Script_u='OK';;
        -f)shift;Script_f=$1;if [ -z "$Script_f" ];then Parameter_error_help;exit;fi;;
        -s)shift;Script_s=$1;if [ -z "$Script_s" ];then Parameter_error_help;exit;fi;;
        -i)shift;Script_i=$1;if [ -z "$Script_i" ];then Parameter_error_help;exit;fi;;
        -h)WEB_LOG_SCRIPT_HELP;exit;;
        *)Parameter_error_help;exit;;
      esac
      shift
    done
  fi


###--------------------函数------------------------
Statistical_specified_number(){
  cat "$Log_file_dir""$Script_f"|grep -w "$Script_s"|wc -l
}

Statistical_log_number(){
if [ $Script_i = 'code' ];then
    cat "$Log_file_dir""$Script_f" | awk '{saber[$10]++}END{for(ss in saber)print ss,saber[ss]}'|sort -r -n -k2| sed -e "1i code\tnumebe" -e "s# #\t#g"
  elif [ $Script_i = 'ip' ];then
    cat "$Log_file_dir""$Script_f" | awk '{saber[$1]++}END{for(ss in saber)print ss,saber[ss]}'|sort -n -k2  |sed -e "1i ip address\tnumber" -e "s# #\t#g" 
  else
    Parameter_error_help
fi
}

Current_network_connection(){
  netstat -an|awk '/^tcp/{saber[$NF]++}END{for(ss in saber)print ss,saber[ss]}'
}

User_file_safety(){
if [ -n "$Script_u" ];then
  Diff_passwd_md5=`/usr/bin/md5sum /etc/passwd|awk '{print $1}'`
  if [ "$Diff_passwd_md5" == $Passwd_file_md5 ];then echo -e '\033[32m/etc/passwd 文件没有被修改,一切正常!\033[0m';exit;fi
  if [ "$Diff_passwd_md5" != $Passwd_file_md5 ];then echo -e "\033[31m/etc/passwd MD5发生了改变,请检查!\033[0m";exit;fi
fi
}



###------------------具体判断----------------------
User_file_safety
if [ "$Script_n" == 'OK' ];then Current_network_connection;exit;fi
if [ -n "$Script_f" -a -n "$Script_s" ];then
    Statistical_specified_number
  elif [ -n "$Script_f" -a -n "$Script_i" ];then
    Statistical_log_number
  elif [ -n "$Script_f" -a -z "$Script_s" -a -z "$Script_i" ];then
    cat "$Log_file_dir""$Script_f"
  else
    Parameter_error_help
fi